/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proxy;

import comum.Message;
import java.util.Observable;
import java.util.Observer;

/**
 *
 * @author root
 */
public class Proxy_IRC implements Observer, Runnable {

    //objeto que conecta ao servidor irc remoto
    public Cliente_IRC cliente;
    //host do servidor remoto onde se quer conectar
    public String hostServidorRemoto;
    //porta do servidor remoto
    public int portaServidorRemoto = 6667;
    //objeto que escuta localmente
    public Servidor_IRC servidor;
    //porta onde o Proxy vai escutar localmente (localhost:portaEscutaLocal)
    public int portaEscutaLocal = 6667;

    public Proxy_IRC(String hostRemoto, int portaRemota, int portaEscutaLocal) {
        this.portaServidorRemoto = portaRemota;
        this.portaEscutaLocal = portaEscutaLocal;
        this.hostServidorRemoto = hostRemoto;
    }

    public Proxy_IRC(String hostRemoto, int portaRemota) {
        this.portaServidorRemoto = portaRemota;
        this.hostServidorRemoto = hostRemoto;
    }

    public Proxy_IRC(String hostRemoto) {
        this.hostServidorRemoto = hostRemoto;
    }

    public void run() {
        servidor = new Servidor_IRC(this.portaEscutaLocal);
        cliente = new Cliente_IRC(this.hostServidorRemoto, this.portaServidorRemoto);
        servidor.addObserver(this);
        cliente.addObserver(this);
        Thread tservidor = new Thread(servidor);
        tservidor.start();
    }

    public void update(Observable o, Object arg) {
        if (arg instanceof String) {
            String leitura = (String) arg;
            if (o instanceof Cliente_IRC) {
               // System.out.println("                                                                " + leitura);
                //ou usar este outro debug que imprime um objeto ServerMessage, que organiza a mensagem
               System.out.println("                                                                " + new Message(leitura));
                servidor.escreverLinha(leitura);
            } else if (o instanceof Servidor_IRC) {
                System.out.println(leitura);
                cliente.escreverLinha(leitura);
            }
        } else if (arg instanceof Boolean) {
            Boolean conectou = (Boolean) arg;
            if (o instanceof Cliente_IRC) {
                if (conectou) {
//                    System.out.println("Conectado ao servidor irc");
                } else {
                    servidor.stop();
                }
            } else if (o instanceof Servidor_IRC) {
                if (conectou) {
//                    System.out.println("Conectaram no Servidor");
                    Thread tcliente = new Thread(cliente);
                    tcliente.start();
                } else {
                    cliente.stop();
                }
            }

        }
    }
}
